package ar.com.aterrizar.uimodels;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;

import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;
import org.uqbar.commons.utils.Transactional;

import ar.com.aterrizar.asientos.Asiento;
import ar.com.aterrizar.entidades.Buscador;
import ar.com.aterrizar.entidades.Cliente;
import ar.com.aterrizar.fecha.Fecha;
import ar.com.aterrizar.homes.ComprasHome;

@Observable
@Transactional
public class BuscadorModel{
	private Cliente cliente;
	private String origen="";
	private String destino="";
	private String fecha="";
	private Collection<Asiento> asientos;
	private Asiento asientoSeleccionado;
	private Boolean habilitarBusqueda=false;
	
	public BuscadorModel(Cliente cliente){
		this.cliente = cliente;
		this.asientos= new ArrayList<Asiento>();
	}
	public Boolean getHabilitarBusqueda(){
		return this.habilitarBusqueda;
	}
	public void search(){
		if((this.origen=="")&&(this.destino=="")&&(this.fecha=="")){
			throw new UserException("Es necesario ingresar todos los parametros de busqueda");
		}
		Buscador buscador = new Buscador(this.cliente, this.origen,this.destino,this.fecha);
		this.asientos=buscador.getAsientos();
	}
	public Collection<Asiento> getAsientos(){
		return this.asientos;
	}
	public String getOrigen(){
		return this.origen;
	}
	public String getDestino(){
		return this.destino;
	}
	public String getFecha(){
		return this.fecha;
	}
	public void setOrigen(String origen){
		if(origen.length()!=3){
			throw new UserException("Debe ingresar un origen valido. El mismo debe tener 3 caracteres.");
		}
		this.origen=origen;
	}
	public void setDestino(String destino){
		if(destino.length()!=3){
			throw new UserException("Debe ingresar un destino valido. El mismo debe tener 3 caracteres.");
		}
		this.destino=destino;
	}
	public void setFecha(String fecha){
		try{
			Fecha.fechavalida(fecha);
		}catch(ParseException exc){
			throw new UserException("La fecha ingresada no es valida. La misma debe tener el formato dd/mm/yyyy.");
		}
		this.fecha=fecha;
	}
	public Cliente getCliente(){
		return this.cliente;
	}
	public Asiento getAsientoSeleccionado() {
		return this.asientoSeleccionado;
	}

	public void setAsientoSeleccionado(Asiento asientoSeleccionado) {
		this.asientoSeleccionado = asientoSeleccionado;
	}
	public void comprar(){
		cliente.comprarPasaje(this.asientoSeleccionado);
		ComprasHome.getInstance().addAsiento(this.asientoSeleccionado);
	}
	public void reservar(){
		cliente.reservar(this.asientoSeleccionado);
	}
}
